import '../entity/game.dart';
import '../entity/user_product.dart';
import 'database_helper.dart';

class UserProductRepository {
  final dbHelper = DatabaseHelper.instance;

  //将一个产品添加到用户的库中（购买）
  Future<void> addToLibrary(UserProduct userProduct) async {
    final db = await dbHelper.database;
    await db.insert('user_products', userProduct.toMap());
  }

  //获取用户库中的所有游戏（不是产品），需要连接三张表
  Future<List<Game>> getLibraryGamesForUser(String userId) async {
    final db = await dbHelper.database;

    // 查询逻辑：
    // 1. 从user_products找到该用户的所有记录
    // 2. 用productId连接products表
    // 3. 用gameId连接games表
    // 4. 使用DISTINCT确保每个游戏只返回一次（即使用户拥有该游戏的多个 product）
    final List<Map<String, dynamic>> maps = await db.rawQuery('''
      SELECT DISTINCT g.* FROM games g
      INNER JOIN products p ON g.id = p.gameId
      INNER JOIN user_products up ON p.id = up.productId
      WHERE up.userId = ?
    ''', [userId]);

    return List.generate(maps.length, (i) => Game.fromMap(maps[i]));
  }


  //检查用户是否拥有某个特定的游戏（不是产品）
  Future<bool> isGameOwnedByUser({required String userId, required String gameId}) async {
    final db = await dbHelper.database;
    //这个查询检查是否存在任何一个user_product记录，
    //其关联的product属于目标 gameId
    //SELECT 1 ... LIMIT 1是一种非常高效的存在性检查方法
    final result = await db.rawQuery('''
      SELECT 1 FROM user_products up
      INNER JOIN products p ON up.productId = p.id
      WHERE up.userId = ? AND p.gameId = ?
      LIMIT 1
    ''', [userId, gameId]);

    return result.isNotEmpty;
  }
}